import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Clase padre de los enemigos, éstos se encargan de atacar a objetos de la clase StarFox
 * 
 * @author Luis Guajardo Olvera
 * @author Daniel Romero Martí
 */
public abstract class Enemigo extends Actor
{
    private int profundidad;
    private int aumentaTam;

    /**
     * Act - do whatever the Enemigo wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {   
        ataca();
        aumentaTam++;
    }    

    /**
     * Método que regresa el valor de la variable profundidad
     */
    public int profundidad()
    {
        return profundidad;
    }
    
    /**
     * Método que modifica el valor de la variable profundidad
     */
    public void profundidad(int cant)
    {
        profundidad = cant;
    }

    /**
     * Método que regresa el valor de la variable aumentaTam
     */
    public int aumentaTam()
    {
        return aumentaTam;
    }
    
    /**
     * Método que modifica el valor de la variable aumentaTam
     */
    public void aumentaTam(int cant)
    {
        aumentaTam = cant;
    }

    /**
     * Encuentra la coordenada X de la Nave StarFox
     */
    public int coordenadaXStarFox()
    {
        World mundo;
        int res;
        mundo=super.getWorld();
        java.util.List listaNav = mundo.getObjects(StarFox.class);
        if(!listaNav.isEmpty())
        {
            Object obj = listaNav.get(0);
            Actor starfox = (Actor)obj;
            res= starfox.getX();
            return (res);
        }
        return 0;
    }

    /**
     * Encuentra la coordenada Y de la nave StarFox
     */
    public int coordenadaYStarFox()
    {
        World mundo;
        int res;
        mundo=super.getWorld();
        java.util.List listaNav = mundo.getObjects(StarFox.class);
        if(!listaNav.isEmpty())
        {
            Object obj = listaNav.get(0);
            Actor starfox = (Actor)obj;
            res= starfox.getY();
            return (res);
        }
        return 0;
    }

    /**
     * Método que verifica si el enemigo hizo contacto con una bala del objecto StarFox y la elimina del mundo
     */
    public void leDispararon()
    {
        World mundo = getWorld();
        java.util.List naves = mundo.getObjects(StarFox.class);
        StarFox nave = (StarFox)naves.get(0);

        Actor balin;
        balin = super.getOneIntersectingObject(Bala.class);
        if(balin !=null)
        {  
            mundo = super.getWorld();
            mundo.removeObject(balin);
            nave.aumentaPuntos(10);
            mundo.removeObject(this);
        }
    }

    /**
     * Método que verifica si el objeto está por salir del mundo y lo elimina
     */
    public void desaparece()
    { 
        World world;
        world=super.getWorld();
        if(super.getX()==world.getWidth() ||super.getY()==world.getHeight())
            world.removeObject(this);
        else
            leDispararon();
    }

    /**
     * Método a ser redefinido
     */
    public abstract void ataca();

    /**
     * Método a ser redefinido
     */
    public abstract void mueve();
}
